﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using RegistroMascotas.Modelo;
using Service;
using System.Data;
using RegistroMascotas2.Presentacion;
using Microsoft.Reporting.WebForms;

namespace RegistroMascotas2
{
    public partial class busqueda_mascota : System.Web.UI.Page
    {
        List<Mascota> _misMascotas = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                cuentacentro.Visible = true;
                panelOculto.Visible = false;

                buscarPorCodigo.Visible = true;
                buscarQRs.Visible = false;
                cuentader.Visible = false;

                try
                {
                    rpvVisor.LocalReport.ReportPath = HttpContext.Current.Server.MapPath("~/Reportes/EjemploReporte.rdlc");
                }
                catch (Exception ex)
                {
                    cuentacentro.Visible = false;
                    cuentader.Visible = false;
                    lblNotificacion.Text = ex.Message;
                    lblNotificacion.CssClass = "errores";
                    panelOculto.Visible = true;
                }
            }
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                gvBusqueda.DataSourceID = "odsFuente";
                gvBusqueda.DataBind();
            }
            catch (Exception ex)
            {
                cuentacentro.Visible = false;
                cuentader.Visible = false;
                lblNotificacion.Text = ex.Message;
                lblNotificacion.CssClass = "errores";
                panelOculto.Visible = true;
            }
        }

        protected void btnModificarMascota_Click(object sender, EventArgs e)
        {
            Mascota m = null;
            Button btnModificarMascota = sender as Button;

            try
            {
                m = GestorDeBusqueda.obtenerMascotaPorId(int.Parse(btnModificarMascota.CommandArgument));

                if (m != null)
                {
                    Session["Mascota"] = null;
                    Session["Mascota"] = m;
                    Response.Redirect("~/mascota-modificar-veterinario.aspx");
                }
            }
            catch (Exception ex)
            {
                cuentacentro.Visible = false;
                cuentader.Visible = false;
                lblNotificacion.Text = ex.Message;
                lblNotificacion.CssClass = "errores";
                panelOculto.Visible = true;
            }
        }

        protected void btnEntregarChapita_Click(object sender, EventArgs e)
        {
            bool exito = false;
            Chapita c = null;
            Button btnEntregarChapita = sender as Button;

            try
            {
                c = GestorDeBusqueda.obtenerChapitaPorId(int.Parse(btnEntregarChapita.CommandArgument));

                if (c.Estado == EstadoChapita.Disponible_No_Entregada.ToString())
                {
                    c.Estado = EstadoChapita.Entregada.ToString();
                    exito = GestorMascota.modificarChapita(c);
                }

                if (exito)
                {
                    cuentacentro.Visible = false;
                    cuentader.Visible = false;
                    panelOculto.Visible = true;
                    lblNotificacion.Text = "La chapita de la mascota ha sido entregada a su dueño.";
                }
            }
            catch (Exception ex)
            {
                cuentacentro.Visible = false;
                cuentader.Visible = false;
                lblNotificacion.Text = ex.Message;
                lblNotificacion.CssClass = "errores";
                panelOculto.Visible = true;
            }
        }

        protected void rBtnModificarMascota_CheckedChanged(object sender, EventArgs e)
        {
            if (rBtnModificarMascota.Checked)
            {
                buscarPorCodigo.Visible = true;
                buscarQRs.Visible = false;
            }
            else
            {
                buscarPorCodigo.Visible = false;
                buscarQRs.Visible = true;
            }

        }

        protected void rBtnQr_CheckedChanged(object sender, EventArgs e)
        {
            if (rBtnQr.Checked)
            {
                buscarQRs.Visible = true;
                buscarPorCodigo.Visible = false;
            }
            else
            {
                buscarQRs.Visible = false;
                buscarPorCodigo.Visible = true;
            }
        }

        protected void btnCrearInforme_Click(object sender, EventArgs e)
        {
            DataTable dtMascotas = GestorMascota.obtenerMascotasRegistradasPorDia(DateTime.Parse(txtFechas.Text).Date);
            bool exito = false;
            Chapita chapi = null;

            MascotaPresentacionBuilder builder = new MascotaPresentacionBuilder();
            List<MascotaPresentacion> mascotas = builder.TraerMascotasPorDia(DateTime.Parse(txtFechas.Text).Date);

            rpvVisor.LocalReport.EnableExternalImages = true;
            rpvVisor.LocalReport.DataSources.Add(new ReportDataSource("dsMisMascotas", mascotas));
            cuentader.Visible = true;

            try
            {
                //recorremos las mascotas del informe para mandar el mail al dueño y para cambiar el estado de la chapita
                foreach (DataRow row in dtMascotas.Rows)
                {
                    //MODIFICACION ESTADO CHAPITA
                    chapi = new Chapita();
                    chapi.IdChapita = int.Parse(row["IdChapita"].ToString());
                    chapi.Estado = EstadoChapita.Disponible_No_Entregada.ToString();

                    exito = GestorMascota.modificarChapita(chapi);

                    if (!exito)
                        throw new Exception("No se pudo completar el proceso de modificación de estado de chapitas.");

                    //ENVIO DEL MAIL
                    Dueño dueñoActual = GestorDeBusqueda.obtenerDueñoPorId(int.Parse(row["IdDueño"].ToString()));
                    exito = GestorDeBusqueda.mandarMail(dueñoActual, row["Nombre"].ToString());

                    if (!exito)
                        throw new Exception("No se pudo completar el envío de mails a los usuarios.");
                }
            }
            catch (Exception ex)
            {
                cuentacentro.Visible = false;
                cuentader.Visible = false;
                lblNotificacion.Text = ex.Message;
                lblNotificacion.CssClass = "errores";
                panelOculto.Visible = true;
            }

        }

        protected void gvBusqueda_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            Button btn;

            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                btn = (Button)e.Row.FindControl("btnEntregarChapita");

                if (btn != null)
                {
                    if (btn.CommandArgument != "")
                    {
                        Chapita chapi = GestorDeBusqueda.obtenerChapitaPorId(int.Parse(btn.CommandArgument));

                        if (chapi.Estado == EstadoChapita.Entregada.ToString())
                        {
                            btn.Visible = false;
                        }
                    }
                }
            }
        }        
    }
}